关于 Linux中监控方面的一些基础笔记
可能不是不喜欢了,而是累了,可能不是之前的喜欢都是假的,只是这个世界本来就很苍白
写在前面
- 笔记是报班学习后整理的,适合温习,不适合新手。蹭着国庆长假整理了一份,希望对小伙伴有帮助.
- 生活加油,天天开心!博文主要围绕以几个方面:
- 监控的基本知识
- zabbix 的安装部署教程,
- 多节点监控实战
可能不是不喜欢了,而是累了,可能不是之前的喜欢都是假的,只是这个世界本来就很苍白
一、监控概述
1.1 监控的目的
监控的目的 | 描述 |
---|---|
报告系统运行状况 | 每一部分必须同时监控,内容包括吞吐量、反应时间、使用率等 |
提前发现问题 | 进行服务器性能调整前,知道调整什么,找出系统的瓶颈在什么地方 |
1.1.1 监控的资源类别
监控的资源类别 | 描述 |
---|---|
公开数据 | Web、FTP、SSH、数据库等应用服务,TCP或UDP端口 |
私有数据 | CPU、内存、磁盘、网卡流量等使用信息,用户、进程等运行信息 |
1.2 监控软件
命令 | 描述 |
---|---|
ps |
查看进程信息 |
uptime |
查看CPU的负载 |
free |
查看系统内存信息 |
swapon -s |
查看交换分区信息 |
df -h |
查看文件系统挂载情况 |
ifconfg |
查看网卡信息 |
netstat或ss |
查看网络连接状态信息 (端口等) |
ping |
测试网络延迟 (是否可以通信) |
traceroute |
跟踪路由 |
iostat |
查询磁盘读写的性能 |
sar |
综合命令,可以查询cpu、磁盘、网络 , 查询历史或实时数据 |
查看进程信息
1 | ######查看进程信息 |
查看cpu负载
1 | #######查看cpu负载 |
查看内存使用信息
1 | #######查看内存使用信息 |
查看交换分区设备信息
1 | #######查看交换分区设备信息 |
查看设备文件系统挂载信息
1 | #######查看设备文件系统挂载信息 |
查看网卡信息, 需安装 net-tools软件包
1 | ########查看网卡信息, 需安装 net-tools软件包 |
查看端口信息和对应的协议,与grep结合使用
1 | ######查看端口信息和对应的协议,与grep结合使用 |
测试网络延迟 (是否可以通信)
1 | #########测试网络延迟 (是否可以通信) |
traceroute可以跟踪路由,查看到目标主机经过哪些路由
1 | ########traceroute可以跟踪路由,查看到目标主机经过哪些路由 |
iostat 查询磁盘的读写性能,需要安装软件包sysstat
1 | ########iostat 查询磁盘的读写性能,需要安装软件包sysstat |
sar查看CPU的信息,第一个数字:指每隔几秒读取数据; 第二个数字: 指取几次CPU的数据
1 | ┌──[root@liruilongs.github.io]-[~] |
使用sar查看所有网卡的实时流量信息
1 | ┌──[root@liruilongs.github.io]-[~] |
1.3 自动化监控系统
||||
|–|–|–|–|
|Cacti | 特点:将监控到的数据,绘制成各种图形|基于SNMP协议 (网络管理协议) 的监控软件,强大的绘图能力|
|Nagios | 特点:状态检查和报警机制 (例如:内存不足或CPU负载高时,及时的给管理员发送报警信息(邮件报警,短信报警等) )|基于Agent监控,强大的状态检查与报警机制,插件极多,自己写监控脚本嵌入到Nagios非常方便|
|Zabbix | 特点:支持多种报警机制,支持分布式监控,支持数据绘图|基于多种监控机制,支持分布式监控|
1.3.1 Zabbix简介
Zabbix 是一个高度集成的监控解决方案,可以实现企业级的开源分布式监控,
Zabbix 通过 C/S模式采集监控数据
C/S (client/server):
客户端/服务器
客户端程序负载采集要监控的数据,然后发送给监控服务器;
监控服务器对客户发送过来的数据进行存储和处理;
Zabbix通过B/S模式实现Web管理
B/S (browser/server): 浏览器/服务器
管理员可以通过浏览器,访问监控服务器web页面,并可以查看和管理监控系统
1.3.2 监控拓扑
Zabbix监控原理: |
---|
部署一个Zabbix监控服务器, 用于存储和处理监控数据; |
如果被监控的是Linux或Windows主机,需要安装客户端程序agent来采集监控数据; |
如果被监控的是网络设备(交换机,路由器等),通过SNMP协议进行监控; |
最后Zabbix监控服务器,将客户端收集来的数据存储到数据库中,通过web页面来管理 |
监控角色 |
---|
监控服务器 |
监控服务器可以通过SNMP (网络管理协议)或Agent采集数据 |
数据可以写入MYSQL、Oracle等数据库中 |
服务器使用LNMP实现web前端的管理 |
被监控主机 |
被监控主机需要安装Agent |
常见的网络设备一般支持SNMP (网络管理协议) |
二、LNMP环境准备
这里的话,因为zabbix web系统使用的是php,所以需要配置LNMP环境。
Nginx是一款小巧而高效的Web服务器软件
,可帮您在Linux系统下快速方便地搭建出LNMP Web服务环境。在ECS实例上搭建LNMP环境
,其中LNMP
分别代表Linux、Nginx、MySQL和PHP
。
2.1 部署LNMP
这里小伙伴可以参考这个:手动部署LNMP环境(CentOS 7)
2.1.1 安装前准备
- 监控服务器(需要使用Web页面操作,因此需要先部署LNMP)
- 设置主机名(zabbixserver)
- 设置IP地址(192.168.26.15)
- 关闭防火墙、SELinux
- 监控客户端 (2.100和2.200)
- 主机web1(192.168.26.14)
- 主机web2(192.168.26.13)
- 关闭防火墙、SELinux
虚拟机环境准备(克隆centos7 模板机): ——> 关闭防火墙和SELinux,嗯,因为需要多个机器,所以我们用
ansible
,方便一点,这里,**192.168.26.15为控制机,192.168.26.14,192.168.26.13 为节点机**
主机名 | IP地址 |
---|---|
zabbixserver | 192.168.26.15 |
web1 | 192.168.26.14 |
web2 | 192.168.26.13 |
配置到物理机的SSH免密
1 | ┌──(liruilong㉿Liruilong)-[/mnt/e/docker] |
ansible环境准备
1 | ┌──[root@zabbixserver]-[/] |
配置控制机到节点机的SSH免密
1 | ┌──[root@zabbixserver]-[/ansible] |
测试ansible
1 | ┌──[root@zabbixserver]-[/ansible] |
检查防火墙和selinux
1 | ┌──[root@zabbixserver]-[/ansible] |
发现防火墙还没有关闭,所以在关闭一下防火墙:
1 | ┌──[root@zabbixserver]-[/ansible] |
2.1.2 部署LNMP
1 | ┌──[root@zabbixserver]-[/ansible] |
安装需要的软件包,也可以分别安装
1 | ##安装Ng |
1 |
|
1 | ###安装数据库及相关软件包 |
修改nginx配置
1 | ┌──[root@zabbixserver]-[~] |
通过systemd的方式管理nginx服务,通过源码安装的NG需要
1 | ##此文件,每次Linux开机时,都会运行里面的所有命令 |
1 | ####nginx管理服务模板文件路径,也可在百度搜索nginx systemd |
1 | #####在/usr/lib/systemcd/systemd下创建nginx服务配置文件 |
2.1.4 启动服务
1 | ┌──[root@zabbixserver]-[~] |
页面测试
1 | ######编写php动态测试页面 |
三、安装Zabbix
官方文档: 从部署包安装
3.1 部署Zabbix监控端服务器
3.1.1 安装软件
1 | ┌──[root@zabbixserver]-[~] |
源码安装zabbix软件
1 | #########进入到zabbix源码包下,源码安装zabbix软件 |
查看zabbix相关的配置文件
1 | #########查看zabbix相关的配置文件 |
获取目标主机监控数据和向目标主机发送监控数据的命令
1 | #########获取目标主机监控数据和向目标主机发送监控数据的命令 |
启动zabbix的命令,zabbix默认无法通过systemd管理
1 | ########启动zabbix的命令,zabbix默认无法通过systemd管理 |
3.1.2初始化准备
创建数据库与数据库账户
1 | ###########创建zabbix数据库并授权 |
导入zabbix提供的备份数据库文件,导入顺序不能发生改变(否则报错)
1 | #########导入zabbix提供的备份数据库文件,导入顺序不能发生改变(否则报错) |
查看mysql的zabbix下的表
1 | ┌──[root@zabbixserver]-[~/zabbix-3.4.4/database/mysql] |
上线Zabbix页面
1 | ┌──[root@zabbixserver]-[~/zabbix-3.4.4] |
安装依赖软件
1 | ┌──[root@zabbixserver]-[~/zabbix-3.4.4/frontends/php] |
修改PHP配置文件
1 | ######php中,分号【;】 代表注释 |
重启php-fpm服务
1 | #########重启php-fpm服务 |
3.1.3 初始化
嗯。这里可能会遇到配置文件无法写入,无法覆盖的问题,主要是权限的问题,需要给/usr/share/nginx/html/
授权
默认登录账户admin,默认密码zabbix
默认登录账户admin,默认密码zabbix |
写入的配置文件
1 | ┌──[root@zabbixserver]-[/usr/share/nginx/html/conf] |
设置中文环境(推荐英文,中文小部分为乱码) |
---|
3.1.4 启动服务
修改配置文件
1 | ┌──[root@zabbixserver]-[/usr/share/nginx/html/conf] |
1 | ######修改配置, 指定zabbix管理的数据库信息 |
####启动服务
必须创建用户zabbix,用于启动zabbix服务
1 | #######必须创建用户zabbix,用于启动zabbix服务 |
3.1.5 开机自启
将 zabbix_server 设置为开机自启服务 |
---|
/etc/rc.local 为开机会执行的脚本文件 |
可以将任意命令写入该脚本文件,开机时就会被执行 |
该文件默认没有可执行权限 |
1 | └─$ echo zabbix_server >> /etc/rc.d/rc.local |
3.2 部署Zabbix被监控端服务器
1 | scp -r /root/zabbix-3.4.4 root@192.168.26.13:/root/ |
3.2.1 配置被监控主机
1 | ┌──[root@zabbixserver]-[/ansible] |
报错了,提示少一个包aclocal-1.15
,我们装一下。
1 | ┌──[root@zabbixserver]-[/ansible] |
查看配置文件路径,只有客户端配置文件
1 | #######查看配置文件路径,只有客户端配置文件 |
获取目标主机监控数据和向目标主机发送监控数据的命令
1 | #########获取目标主机监控数据和向目标主机发送监控数据的命令 |
查看启动zabbix客户端的命令
1 | ########查看启动zabbix客户端的命令 |
修改配置文件
允许被哪些服务器监控,允许自己监控自己,允许26.15来监控自己
1 | ┌──[root@zabbixserver]-[/ansible] |
监控服务器的IP地址和端口号
1 | ######监控服务器的IP地址和端口号 |
启动服务
1 | └─$ ansible web -m shell -a 'useradd -s /sbin/nologin zabbix;zabbix_agentd;ss -ntulpa | grep zabbix' |
3.2.3 开机自启
将zabbix_agend设置为开机自启服务 |
---|
/etc/rc.local 为开机会执行的脚本文件 |
可以将任意命令写入该脚本文件,开机时就会被执行 |
该文件默认没有可执行权限 |
1 | ┌──[root@zabbixserver]-[/ansible] |
四、zabbix 实战
一、基础监控
1.2 添加监控主机
添加监控主机 |
---|
Host (主机) 是监控的基本载体,Zabbix 所有监控都是基于Host,通过Configuration —> Hosts —> Create Host创建 |
注意设置中文环境后,中英文差异, 选择 “ 配置 ”,然后选择 “主机”,查看被监控的主机 |
点击 “停用的”,然后选中 “确认”,开启监控状态 |
第一步:选择 “配置”, 然后选择 “主机”, 最后选择 “创建主机” |
第二步:设置被监控端的主机名, 将主机添加到任意一个组中 |
第三步:设置被监控端的IP地址和端口号 |
第四步:点击最后的 “添加按钮”, 添加web1主机完成 |
应用监控模板 |
---|
为主机添加关联的监控模板 |
在 “Templates” 模板选项卡页面中 |
找到 Link new templates,select 选项合适的模板添加 |
这里我们选择 Template OS Linux模板 |
**这些32个zabbix默认的监控项,会对Linux系统的内存,CPU,网卡流量,磁盘等进行监控**; |
选择对应的模板,则该模板中默认的所有监控选项都可以使用 |
查看监控数据 |
---|
可以点击“Monitoring” —> “Latest data” |
在过滤器中填写条件,根据群组和主机搜索即可 |
第一步:选择 “监测中”,选择“最新数据”,选择“主机群组”,选择 “主机”,最后选择 “应用” |
五、自定义监控
5.1 自定义key
被监控端修改Agent配置文件
1 | #####查看被监控主机web1的配置文件 |
1 | #####被监控端修改Agent配置文件 |
加载配置文件的目录,取消注释,也是自定义选项存放的目录
1 | ┌──[root@zabbixserver]-[/ansible] |
开启自定义监控功能,默认注释
1 | ##########开启自定义监控功能,默认注释 |
1 | ┌──[root@zabbixserver]-[/ansible] |
创建自定义key
1 | ######进入到自定义监控文件的目录下 |
1 | ┌──[root@zabbixserver]-[/ansible] |
重启Agentd
1 | #####被监控端配置文件发生变化,需要重启服务 |
1 | ┌──[root@zabbixserver]-[/ansible] |
测试自定义key是否生效
1 | #######注意:最后count.user为监控项的key,不是监控项的文件名 |
5.2 一些概念
创建自定义监控项的步骤: |
---|
创建新的监控模板 (默认监控项为空); |
在监控模板 中创建应用集(对监控项进行分类管理) ; |
将自定义监控项 加入到对应的应用集中 ; |
监控模板 —> 应用集 —> 监控项 |
5.3 创建监控模板
登录监控服务器Web管理页面 |
---|
选择 Configuration —> Templates 创建模板 |
1 | ┌──[root@zabbixserver]-[/ansible] |
六、拓扑图与聚合图形
6.1 拓扑图
6.1.1 拓扑图
拓扑图 |
---|
绘制拓扑图可以快速了解服务器架构 |
Monitoring —> Maps (拓扑图) |
选择默认的 Local network 拓扑图,编写即 |
创建一个空的拓扑图 |
lcon(图标),添加新的设备后可以点击图标修改属性Shape(形状),Link(连线),先选择两个图标,再选择连线完成后,点击Update(更新) |
编辑拓扑图 |
:**再次选择 ”添加“,点击”新的组件** |
修改新组件的 ” 地图元素” |
建立监控服务器与被监控主机web1的链接 |
更新拓扑图 |
6.2 聚合图形
聚合图形 |
---|
在一个页面显示多个数据图表,方便了解多组数据 |
Monitoring —> Screens(聚合图形)—> Create screen |
Owner: 使用默认的Admin用户 |
Name: 名称设置为 web1 |
Columns: 列数设置为2列 |
Rows: 行数设置为4行 |
第一步:选择“监控中”,选择“聚合图形”,选择“创建聚合图形” |
选择刚刚创建的聚合图形(web1),点击后面的构造函数(constructor),点击Change (更改),设置每行每列需要显示的数据图表,第一步:选择“监控中”,选择“聚合图形”,选择web后面的“构造函数” |
第二步:选择第二个 “更改”,配置图形数据,查看网卡信息 |
七、自动发现
**自动发现(Discovery)**:当Zabbix需要监控的设备越来越多,手动添加监控设备越来越有挑战,此时,可以考虑使用自动发现功能
**自动发现可以实现**:发现主机、添加主机、添加主机到组、链接模板等。
自动发现 |
---|
zabbix自动发现我们需要监控的目标主机; |
zabbix自动的把这台主机添加到监控的主机列表中; |
zabbix自动将目标主机加入到特定的组中; |
zabbix自动为目标主机链接模板; |
自动发现(Discovery)流程 |
---|
创建自动发现规则 |
创建 Action 动作(发现主机后自动执行什么动作) |
通过动作,执行添加主机,链接模板到主机等操作 |
7.1 自动发现规则
创建自动发现规则 |
---|
Configuration —> Discovery —> Create discovery rule |
第一步:选择“配置”,选择“自动发现”,选择“创建自动发现规则” |
【名称】 #任意定义 |
【IP范围】 #设置自动发现的主机IP范围,不同IP以逗号作为分隔; |
【更新间隔】 #每隔多长时间扫描一次被监控主机,1h为正常开发环境参数,1m为实验环境参数; |
【检查】 #选择根据什么服务来发现目标主机; |
填写规则 |
自动发现的IP范围(逗号隔开可以写多个) |
多久做一次自动发现 |
(默认为1小时,仅实验修改为1m) |
【名称】 #任意定义 |
【IP范围】 #设置自动发现的主机IP范围,不同IP以逗号作为分隔; |
【更新间隔】 #每隔多长时间扫描一次被监控主机,1h为正常开发环境参数,1m为实验环境参数; |
【检查】 #选择根据什么服务来发现目标主机; |
检查的方式: |
HTTP、FTP、Agent的自定义key等检查 |
7.2 创建动作
创建动作 |
---|
Configuration —> Actions |
Event source(Discovery) —> Create action |
注意:选择事件源为:自动发现 |
第一步:选择“配置”,选择“动作”,事件源选择“自动发现”,选择“创建动作” |
添加动作名称,添加触发动作的条件 |
操作(触发动作后要执行的操作指令),操作细节如下: |
添加主机到组,与模板链接(HTTP模板) |
第二步:添加动作“名称”,选择“新的触发条件” (进一步过滤要发现的主机),选择“添加” |
八、监控触发器
8.1 基本概念
基本概念 |
---|
自定义的监控项默认不会自动报警 |
首页也不会提示错误 |
需要配置触发器与报警动作才可以自动报警 |
动作(action) | 触发器(trigger) |
---|---|
触发器的条件被触发后的行为 | 表达式,如内存不足300M,用户超过30个等; |
可以是发送邮件、也可以是重启某个服务等 | 当触发条件发生后,会导致一个触发事件; |
触发事件会执行某个动作; |
8.2 触发器
8.2.1 创建触发器
第二步:选择“Configuration”,选择”Templates”, 选择对应模板后的“Triggers” |
第三步:选择 “Create trigger”,创建触发器, |
Expression表达式:触发异常的条件 |
{sserver>:<key>.<function>(<parameter>)}<operator><constant>住机: key.函数(参数)<表达式>常数 |
{web1:system.cpu.load[all, avg1].last(0)}>5 //0为最新数据如果web1主机最新的CPU平均负载值大于5,则触发器状态Problem |
{vfs.fs.size[/,free].max(5m)}<10G //5m为最近5分钟根分区,最近5分钟的最大容量小于10G,则状态进入Problem |
{fvis.file.cksum[/etc/passwd].diff(0)}>0 //0为最新数据,最新一次校验/etc/passwd如果与上一次有变化,则状态进入Problem |
Expression表达式案例 |
大多数函数使用秒作为参数,使用#代表不同含义 |
avg,count,last,min and max 函数支持额外的第二个参数time_shift (时间偏移量) |
这个参数允许从过去一段时间内引用数据。 |
【Item】 #模板对应的监控项,对具体的监控项设置触发器 |
【Function】 #选择已经定义好的触发器表达式 |
【Last of(T)】 #最近多少时间内(秒),满足表达式,才会触发 |
【Time shift】 #指偏移量,取多长时间以前的监控数据,用于条件判断 |
针对模板【count_line_passwd】中的监控项【count_passwd_item】设置触发条件; |
使用函数判断:当监控到的最小值大于N(N=20)时,被触发; |
取7200秒(2小时)以前,向后再推移300秒的监控数据,用于触发条件判断; |
选择触发器报警级别,Add创建该触发器 |
九、报警邮件
9.1 设置邮件
创建Media
设置邮件服务器 |
---|
Administration —> Media Type —> 选择Email邮件 |
设置邮件服务器信息 |
第一步:选择”管理“,选择”报警媒介类型“,点击”Email“电子邮件 |
第二步:设置报警媒介 |
【名称】 #名称可以任意定义 |
【类型】 #选择”电子邮件“ 用于发送报警信息 |
【SMTP服务器】 #邮件服务器的地址,localhost指用本机作为邮件服务器 |
【SMTP服务器端口】 #邮件服务器的端口号,默认为25 |
【SMTP电邮】 #邮件服务器的账户,root作为邮件服务器的账户,localhost指本机 |
【安全链接】 #如果是发送到其他邮箱上(qq,163),需要选择对应的安全链接方式 |
【认证】 #用户名,密码 |
选择Media菜单 —> 点击Add添加报警媒介 |
在Media Type中填写报警类型,收件人,时间等信息 |
第二步:给用户添加报警方式,”选择报警媒介“,选择 ”添加“ |
9.2 创建动作
Action(行为) |
---|
定义当触发器被触发时,执行什么Action |
通过Configuration —> Actions —> Create action 创建 |
选择 ”配置“, 选择”动作“, 选择”触发器” ,根据触发器来”创建动作“ |
配置动作的具体操作行为(发送信息或执行远程命令) |
无限次数发送邮件,60秒1次,发送给Admin用户 |
【步骤】 #1 - 0 代表只要问题没有解决,就会一直发送报警邮件,1 - 10指只会发送最多10封报警邮件; |
【步骤持续时间】 #默认时间为秒,指每隔多长时间发送一次报警邮件; |
【发送到用户】 #将报警邮件发送给哪个用户,使用【添加】; |
【仅送到】 #选择Email,只采用邮件的发送方式,all指的是所有方式都用; |
选择”监测中”, 选择 “仪表盘”,查看监控信息 |
嗯,我這個沒有成功,時間關係,以後在研究,感興趣小夥伴可以研究下
十、主被动监控
1.1 概述
主动和被动都是对被监控端主机而言的
默认zabbix采用的是被动监控,当监控主机达到一定量级后,Zabbix服务器会越来越慢,此外,可以考虑使用主动监控,释放服务器的压力,另外,Zabbix 也支持分布式监控,也是可以考虑的方案
被动监控 | 主动监控 |
---|---|
被动监控:Server向Agent发起连接 | 主动监控:Agent向Server发起连接 |
**区别**:Server 不用每次需要数据都连接Agent,Agent会自己收集数据并处理数据,Server仅需要保存数据即可
1.2 主动监控
十一、监控Nginx
十二、监控网络连接状态
关于 Linux中监控方面的一些基础笔记
https://liruilongs.github.io/2021/09/30/Linux/关于 Linux中监控方面的一些笔记/